From 4d6a4b8c4d029aa7fb179b31c219cefdb527ec1c Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Mon, 14 Aug 2006 16:35:49 +0100 Subject: [PATCH] [LINUX] Mark /dev/mem regions as VM_PFNMAP. Signed-off-by: Keir Fraser --- linux-2.6-xen-sparse/arch/i386/mm/ioremap-xen.c | 2 +- linux-2.6-xen-sparse/mm/memory.c | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/linux-2.6-xen-sparse/arch/i386/mm/ioremap-xen.c b/linux-2.6-xen-sparse/arch/i386/mm/ioremap-xen.c index 775e0ef22d..cb024992c3 100644 --- a/linux-2.6-xen-sparse/arch/i386/mm/ioremap-xen.c +++ b/linux-2.6-xen-sparse/arch/i386/mm/ioremap-xen.c @@ -121,7 +121,7 @@ int direct_remap_pfn_range(struct vm_area_struct *vma, domid_t domid) { /* Same as remap_pfn_range(). */ - vma->vm_flags |= VM_IO | VM_RESERVED; + vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP; if (domid == DOMID_SELF) return -EINVAL; diff --git a/linux-2.6-xen-sparse/mm/memory.c b/linux-2.6-xen-sparse/mm/memory.c index 827a0a37a4..1a63339203 100644 --- a/linux-2.6-xen-sparse/mm/memory.c +++ b/linux-2.6-xen-sparse/mm/memory.c @@ -390,7 +390,7 @@ struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr, pte_ if (vma->vm_flags & VM_PFNMAP) { unsigned long off = (addr - vma->vm_start) >> PAGE_SHIFT; - if (pfn == vma->vm_pgoff + off) + if ((pfn == vma->vm_pgoff + off) || !pfn_valid(pfn)) return NULL; if (!is_cow_mapping(vma->vm_flags)) return NULL; @@ -405,8 +405,7 @@ struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr, pte_ * Remove this test eventually! */ if (unlikely(!pfn_valid(pfn))) { - if (!(vma->vm_flags & VM_RESERVED)) - print_bad_pte(vma, pte, addr); + print_bad_pte(vma, pte, addr); return NULL; } -- 2.30.2